package someTestExcemple.ioStream;

import java.io.*;

public class FileInputStreamTest1 {
    //文件字节输入流练习  --读取文件到程序
    public static void main(String[] args) throws IOException {
        test2();
    }
    public static void test1() throws IOException {
        InputStream inputStream = new FileInputStream(new File("D:\\myPrivateFiles\\jottings\\mkDirTest\\长生乱1.1.txt"));
        //InputStream inputStream1 = new FileInputStream("D:\\myPrivateFiles\\jottings\\mkDirTest\\长生乱1.1.txt");
        //读取一个字节，返回一个int类型，如果读取到文件末尾(前面的字节全读取完了)，返回-1
//        int b1 = inputStream.read();
//        System.out.println(b1);
//        System.out.println((char)b1);

        //循环一个个读取字节
        int b;
        StringBuilder sb = new StringBuilder();
        while((b = inputStream.read()) != -1) {
            sb.append((char)b); //强行转成char 如果是中文会出现乱码
        }
        System.out.println(sb);
        //流使用完毕，需要关闭，释放系统资源
        inputStream.close();
    }
    public static void test2() throws IOException {
        InputStream inputStream =  new FileInputStream("src/main/java/someTestExcemple/ioStream/fileInPutSreamTest.txt");
        //一次取得多个字节 返回读取的字节数量 如果读取到文件末尾，返回-1
        byte[] buffer = new byte[6]; //相当于缓存区域
        int len;
        while((len = inputStream.read(buffer)) != -1) {

            //System.out.println(new String(buffer)); //注意第二次读取的时候剩下gh,此时 buffer前两位会被替换为gh,后四位没有更新
            //所有应该用下面这种方式
            System.out.println(new String(buffer,0,len));
        }
        inputStream.close();
    }

    public static void test3() throws IOException {
        //一次性读取所有字节
        InputStream inputStream = new FileInputStream("src/main/java/someTestExcemple/ioStream/fileInPutSreamTest.txt");

        //从输入流中一次性读取所有剩余字节 -- jdk8以上支持，不适合于大文件
//        byte[] buffer = inputStream.readAllBytes();
//        System.out.println(new String(buffer));
    }
}
